package es.ucm.fdi.isbc.viviendas;

import java.util.Vector;
import jcolibri.evaluation.Evaluator;
import jcolibri.evaluation.evaluators.LeaveOneOutEvaluator;


public class EvaluadorLeaveOneOut {

	
	 
	

	public static void evaluarLeaveOneOut()
	{
		//Se crea el evaluador
		LeaveOneOutEvaluator evaluador=new LeaveOneOutEvaluator();
		//Se crea la aplicacion Tasador
		Principal app=new Principal();
		//Este es el algoritmo de fuersa bruta que se describe en la memoria
//		double [] parametros = {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
//		double [] parmax= {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
//		double media_max=0.0;
//		double paso= 0.2;
//		for(int i0=0;i0<5;i0++){
//			parametros[0]=i0*paso;
//			for(int i1=0;i1<5;i1++){
//				parametros[1]=i1*paso;
//				for(int i2=0;i2<5;i2++){
//					parametros[2]=i2*paso;
//					for(int i3=0;i3<5;i3++){
//						parametros[5]=i3*paso;
//						for(int i4=0;i4<5;i4++){
//							parametros[6]=i4*paso;
							
		//app.setParam(parametros);
		//Se inicializa el evaluador con la apliacion Tasador
		evaluador.init(app);
		//se lanza la evaluacion
		evaluador.LeaveOneOut();
		//Tomamos los aciertos para calcular la tasa de aciertos (media)
		Vector<Double> vectorAciertos = Evaluator.getEvaluationReport().getSeries("Aciertos");
	
		double media = 0.0;
		for (Double acierto: vectorAciertos)
			media += acierto;
		media = media / (double)Evaluator.getEvaluationReport().getNumberOfCycles();
		//Parte del algoritmo de fuersa bruta que se describe en la memoria
//		if(media>media_max){
//			media_max=media;
//			parmax=parametros;
//			System.out.println(media_max);
//			for(int voc=0;voc<10;voc++)
//			System.out.println(parmax[voc]);
//		}
		//Intrducimos el dato de la media de aciertos en el informe
		Evaluator.getEvaluationReport().putOtherData("Media Aciertos", Double.toString(media));
		//Tomamos los confianzas para calcular la confianza media
		Vector<Double> vectorConfianza = Evaluator.getEvaluationReport().getSeries("Confianza");
		double media_conf = 0.0;
		for (Double conf: vectorConfianza)
			media_conf += conf;
		media_conf = media_conf / (double)Evaluator.getEvaluationReport().getNumberOfCycles();
		//Intrducimos el dato de la confianza media  en el informe
		Evaluator.getEvaluationReport().putOtherData("Media Confianza", Double.toString(media_conf));
		//Mostramos el resultado por consola y por pantalla
		System.out.println(Evaluator.getEvaluationReport().toString());
		jcolibri.evaluation.tools.EvaluationResultGUI.show(Evaluator.getEvaluationReport(), 
															"Evaluacion Tasador", false);
		
		//Parte del algoritmo de fuersa bruta que se describe en la memoria									
//						}
//					}
//				}
//			}
//		}
//		System.out.println(media_max);
//		for(int voc=0;voc<10;voc++)
//		System.out.println(parmax[voc]);
	}
	
	public static void main(String[] args) {
		evaluarLeaveOneOut();
	}
}
